// pages/my/my.js
let utils = require('../../utils/utils.js')
const app = getApp()
let _this;
Page({

    /**
     * 页面的初始数据
     */
    data: {
        userInfo: '',
    },

    navTo(e) {
        app.com.navTo(e)
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        _this = this;
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {
        let userInfo = wx.getStorageSync("userInfo");
        if (userInfo) {
            this.setData({
                userInfo: userInfo
            })
        } else {
            utils.setCallbackUrl("switchTab");
            wx.navigateTo({
                url: '/pages/login/login',
            })
        }
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    },

    /**
     * 通过微信获取手机号码
     */
    getPhoneNumber(e) {
        console.log(e.detail.code) // 动态令牌
        console.log(e.detail.errMsg) // 回调信息（成功失败都会返回）
        console.log(e.detail.errno) // 错误码（失败时返回）
    },

    // 第一步 初始化蓝牙模块
    openBluetoothAdapter() {
        wx.openBluetoothAdapter({
            success: (res) => {
                console.log('第一步、蓝牙初始化成功', res)
                // 开始搜索附近蓝牙
                this.startBluetoothDevicesDiscovery()
            },
            fail: (res) => {
                console.log("第一步、蓝牙初始化失败", res);
                wx.showToast({
                    title: '蓝牙初始化失败',
                    icon: 'none'
                })
            }
        })
    },

    // 第二步 开始搜索附近的蓝牙设备
    startBluetoothDevicesDiscovery() {
        wx.startBluetoothDevicesDiscovery({
            allowDuplicatesKey: false,
            success: (res) => {
                console.log('开始搜索附近的蓝牙设备', res)
                this.onBluetoothDeviceFound()
            },
        })
    },

    // 第三步 监听发现附近的蓝牙设备
    onBluetoothDeviceFound() {
        wx.onBluetoothDeviceFound((res) => {
            res.devices.forEach(device => {
                if (!device.name && !device.localName) {
                    return
                }
                console.log("发现的蓝牙设备", device)
                this.data.devices.push(device)
                this.setData({
                    devices: this.data.devices
                })
            })
        })
    },

    // 第四步、 建立连接
    createBLEConnection(deviceId) {
        wx.createBLEConnection({
            deviceId: deviceId,
            success: (res) => {
                wx.showToast({
                    title: '蓝牙连接成功',
                    icon: 'none'
                })
                this.getBLEDeviceServices(deviceId)
            },
            fail(res) {
                wx.showToast({
                    title: '蓝牙连接失败',
                    icon: 'none'
                })
            }
        })
    },

    // 第五步、获取蓝牙设备所有服务(service)。
    getBLEDeviceServices(deviceId) {
        wx.getBLEDeviceServices({
            deviceId: deviceId,
            success: (res) => {
                console.log('蓝牙设备所有服务', res)
                for (var i = 0; i < res.services.length; i++) {
                    if (res.services[i].isPrimary) {
                        this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid);
                        return;
                    }
                }
            },
            fail(res) {
                console.log('蓝牙设备所有服务失败', res)
            }
        })
    },

    // 第六步、 获取蓝牙设备某个服务中所有特征值(characteristic)
    getBLEDeviceCharacteristics(deviceId, serviceId) {
        wx.getBLEDeviceCharacteristics({
            deviceId,
            serviceId,
            success: (res) => {
                for (let i = 0; i < res.characteristics.length; i++) {
                    let item = res.characteristics[i]

                    if (item.properties.write) {
                        this._deviceId = deviceId
                        this._serviceId = serviceId
                        this._characteristicId = item.uuid
                    }
                    if (item.properties.notify) {
                        this._readDeviceId = deviceId
                        this._readServiceId = serviceId
                        this._readCharacteristicId = item.uuid
                    }
                }
            }
        })
    },

    // 第七步、获取蓝牙的返回信息
    onBLEValue() {
        wx.onBLECharacteristicValueChange(function (res) {
            var value = ab2Str(res.value);
            console.log("第七步，读取蓝牙的值", value);
        })
        wx.notifyBLECharacteristicValueChange({
            state: true, // 启用 notify 功能
            deviceId: this._readDeviceId,
            serviceId: this._readServiceId,
            characteristicId: this._readCharacteristicId,
            success(res) {
                console.log('第七步，启用notify成功', res.errMsg)
            }
        })
    },

    //第八步、 向蓝牙设备发送数据
    writeBLECharacteristicValue() {
        // 向蓝牙设备发送一个0x00的16进制数据
        let buffer = new ArrayBuffer(1)
        let dataView = new DataView(buffer)
        dataView.setUint8(0, Math.random() * 255 | 0)
        wx.writeBLECharacteristicValue({
            deviceId: this._deviceId,
            serviceId: this._deviceId,
            characteristicId: this._characteristicId,
            value: buffer,
        })
    },

    linkBLE(e) {
        console.log("search BLE");
        this.openBluetoothAdapter();
    }
})